<template>
    <el-card
        shadow="never"
        class="aui-card--fill">
        <div class="mod-job__schedule">
            <el-form
                :inline="true"
                :model="dataForm"
                @keyup.enter.native="getDataList()">
                <el-form-item>
                    <el-input
                        v-model="dataForm.beanName"
                        :placeholder="$t('schedule.beanName')"
                        clearable/>
                </el-form-item>
                <el-form-item>
                    <el-button @click="getDataList()">
                        {{ $t('query') }}
                    </el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="$hasPermission('sys:schedule:save')"
                        type="primary"
                        @click="addOrUpdateHandle()">
                        {{ $t('add') }}
                    </el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="$hasPermission('sys:schedule:delete')"
                        type="danger"
                        @click="deleteHandle()">
                        {{ $t('deleteBatch') }}
                    </el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="$hasPermission('sys:schedule:pause')"
                        type="danger"
                        @click="pauseHandle()">
                        {{ $t('schedule.pauseBatch') }}
                    </el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="$hasPermission('sys:schedule:resume')"
                        type="danger"
                        @click="resumeHandle()">
                        {{ $t('schedule.resumeBatch') }}
                    </el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="$hasPermission('sys:schedule:run')"
                        type="danger"
                        @click="runHandle()">
                        {{ $t('schedule.runBatch') }}
                    </el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="$hasPermission('sys:schedule:log')"
                        type="success"
                        @click="logHandle()">
                        {{ $t('schedule.log') }}
                    </el-button>
                </el-form-item>
            </el-form>
            <el-table
                v-loading="dataListLoading"
                :data="dataList"
                border
                style="width: 100%;"
                @selection-change="dataListSelectionChangeHandle"
                @sort-change="dataListSortChangeHandle">
                <el-table-column
                    type="selection"
                    header-align="center"
                    align="center"
                    width="50"/>
                <el-table-column
                    :label="$t('schedule.beanName')"
                    prop="beanName"
                    header-align="center"
                    align="center"/>
                <el-table-column
                    :label="$t('schedule.params')"
                    prop="params"
                    header-align="center"
                    align="center"/>
                <el-table-column
                    :label="$t('schedule.cronExpression')"
                    prop="cronExpression"
                    header-align="center"
                    align="center"/>
                <el-table-column
                    :label="$t('schedule.remark')"
                    prop="remark"
                    header-align="center"
                    align="center"/>
                <el-table-column
                    :label="$t('schedule.status')"
                    prop="status"
                    sortable="custom"
                    header-align="center"
                    align="center">
                    <template slot-scope="scope">
                        <el-tag
                            v-if="scope.row.status === 1"
                            size="small">
                            {{ $t('schedule.status1') }}
                        </el-tag>
                        <el-tag
                            v-else
                            size="small"
                            type="danger">
                            {{ $t('schedule.status0') }}
                        </el-tag>
                    </template>
                </el-table-column>
                <el-table-column
                    :label="$t('handle')"
                    fixed="right"
                    header-align="center"
                    align="center"
                    width="150">
                    <template slot-scope="scope">
                        <el-button
                            v-if="$hasPermission('sys:schedule:update')"
                            type="text"
                            size="small"
                            @click="addOrUpdateHandle(scope.row.id)">
                            {{ $t('update') }}
                        </el-button>
                        <el-button
                            v-if="$hasPermission('sys:schedule:pause')"
                            type="text"
                            size="small"
                            @click="pauseHandle(scope.row.id)">
                            {{ $t('schedule.pause') }}
                        </el-button>
                        <el-button
                            v-if="$hasPermission('sys:schedule:resume')"
                            type="text"
                            size="small"
                            @click="resumeHandle(scope.row.id)">
                            {{ $t('schedule.resume') }}
                        </el-button>
                        <el-button
                            v-if="$hasPermission('sys:schedule:run')"
                            type="text"
                            size="small"
                            @click="runHandle(scope.row.id)">
                            {{ $t('schedule.run') }}
                        </el-button>
                        <el-button
                            v-if="$hasPermission('sys:schedule:delete')"
                            type="text"
                            size="small"
                            @click="deleteHandle(scope.row.id)">
                            {{ $t('delete') }}
                        </el-button>
                    </template>
                </el-table-column>
            </el-table>
            <el-pagination
                :current-page="page"
                :page-sizes="[10, 20, 50, 100]"
                :page-size="limit"
                :total="total"
                layout="total, sizes, prev, pager, next, jumper"
                @size-change="pageSizeChangeHandle"
                @current-change="pageCurrentChangeHandle"/>
            <!-- 弹窗, 新增 / 修改 -->
            <add-or-update
                v-if="addOrUpdateVisible"
                ref="addOrUpdate"
                @refreshDataList="getDataList"/>
            <!-- 弹窗, 日志列表 -->
            <log
                v-if="logVisible"
                ref="log"/>
        </div>
    </el-card>
</template>

<script>
import mixinViewModule from '@/mixins/view-module';
import AddOrUpdate from './schedule-add-or-update';
import Log from './schedule-log';
export default {
    components: {
        AddOrUpdate,
        Log
    },
    mixins: [mixinViewModule],
    data() {
        return {
            mixinViewModuleOptions: {
                getDataListURL: '/sys/schedule/page',
                getDataListIsPage: true,
                deleteURL: '/sys/schedule',
                deleteIsBatch: true
            },
            dataForm: {
                beanName: ''
            },
            logVisible: false
        };
    },
    methods: {
    // 暂停
        pauseHandle(id) {
            if (!id && this.dataListSelections.length <= 0) {
                return this.$message({
                    message: this.$t('prompt.deleteBatch'),
                    type: 'warning',
                    duration: 500
                });
            }
            this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.pause') }), this.$t('prompt.title'), {
                confirmButtonText: this.$t('confirm'),
                cancelButtonText: this.$t('cancel'),
                type: 'warning'
            }).then(() => {
                this.$http.put('/sys/schedule/pause', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => {
                    if (res.code !== 0) {
                        return this.$message.error(res.msg);
                    }
                    this.$message({
                        message: this.$t('prompt.success'),
                        type: 'success',
                        duration: 500,
                        onClose: () => {
                            this.getDataList();
                        }
                    });
                }).catch(() => {});
            }).catch(() => {});
        },
        // 恢复
        resumeHandle(id) {
            if (!id && this.dataListSelections.length <= 0) {
                return this.$message({
                    message: this.$t('prompt.deleteBatch'),
                    type: 'warning',
                    duration: 500
                });
            }
            this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.resume') }), this.$t('prompt.title'), {
                confirmButtonText: this.$t('confirm'),
                cancelButtonText: this.$t('cancel'),
                type: 'warning'
            }).then(() => {
                this.$http.put('/sys/schedule/resume', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => {
                    if (res.code !== 0) {
                        return this.$message.error(res.msg);
                    }
                    this.$message({
                        message: this.$t('prompt.success'),
                        type: 'success',
                        duration: 500,
                        onClose: () => {
                            this.getDataList();
                        }
                    });
                }).catch(() => {});
            }).catch(() => {});
        },
        // 执行
        runHandle(id) {
            if (!id && this.dataListSelections.length <= 0) {
                return this.$message({
                    message: this.$t('prompt.deleteBatch'),
                    type: 'warning',
                    duration: 500
                });
            }
            this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.run') }), this.$t('prompt.title'), {
                confirmButtonText: this.$t('confirm'),
                cancelButtonText: this.$t('cancel'),
                type: 'warning'
            }).then(() => {
                this.$http.put('/sys/schedule/run', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => {
                    if (res.code !== 0) {
                        return this.$message.error(res.msg);
                    }
                    this.$message({
                        message: this.$t('prompt.success'),
                        type: 'success',
                        duration: 500,
                        onClose: () => {
                            this.getDataList();
                        }
                    });
                }).catch(() => {});
            }).catch(() => {});
        },
        // 日志列表
        logHandle() {
            this.logVisible = true;
            this.$nextTick(() => {
                this.$refs.log.init();
            });
        }
    }
};
</script>
